/**
 * @description: Scanner类，扫描器，扫描模板字符串，返回一个一个片段
 * @return {*}
 */
export default class Scanner {
  constructor(templateStr) {
    this.templateStr = templateStr
    // 指针
    this.pos = 0
    this.tail = templateStr
  }
  //功能弱，就是走过指定内容，没有返回值
  scan(tag) {
    if (this.tail.indexOf(tag) === 0) {
      this.pos += tag.length
      this.tail = this.templateStr.substring(this.pos)
    }
  }
  //让指针进行扫描，直到遇见指定内容结束，并且能够返回结束之前路过的文字
  // stopTag是结束标记，意味着遇到{{即停止
  scanUntil(stopTag) {
    let pos_backup = this.pos
    while (this.tail.indexOf(stopTag) !== 0 && !this.eos()) {
      this.pos++
      this.tail = this.templateStr.substring(this.pos)
    }
    return this.templateStr.substring(pos_backup, this.pos)
  }
  eos() {
    return this.pos >= this.templateStr.length
  }
}
